package com.ai.tikai.rabbitmq;

import com.ai.tikai.config.GetChatClient;
import com.ai.tikai.entity.CommentAuditRecord;
import com.ai.tikai.entity.Comments;
import com.ai.tikai.mapper.CommentAuditRecordMapper;
import com.ai.tikai.mapper.CommentsMapper;
import com.ai.tikai.prompt.AuditCommentPrompt;
import com.ai.tikai.service.CommentsFeignClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

import static com.ai.tikai.prompt.AuditCommentPrompt.userPromptTemplate;

@Slf4j
@Component
public class AuditCommentConsumer {
    // 这个队列名必须和你在网页上创建的队列名完全一样
    private static final String QUEUE_NAME = "comment.audit.queue";
    @Autowired
    private CommentsFeignClient commentsFeignClient;// 直接注入
    @Autowired
   CommentAuditRecordMapper commentAuditRecordMapper;
    @Autowired
    CommentsMapper commentsMapper;
    @Autowired
    GetChatClient getChatClient;
    @RabbitListener(queues = QUEUE_NAME)
    public void handleCommentAudit(String message) {
        // Spring 会自动监听这个队列，一旦有消息进来，此方法就会被调用
        Long commentId = Long.parseLong(message);
        System.out.println("从MQ接收到审核任务，评论ID: " + commentId);
        // ... 执行你的AI审核逻辑 ...
        Comments commentById = commentsFeignClient.getCommentById(commentId);
        ChatClient chatClient = getChatClient.getChatClient();
        // 使用 StringSubstitutor 或 .replace() 替换占位符
        // 使用 StringSubstitutor 或 .replace() 替换占位符
        // 使用 StringSubstitutor 或 .replace() 替换占位符
        String finalUserPrompt = userPromptTemplate.replace("{{comment_to_review}}", commentById.getContent());
//        String content = chatClient.prompt()
//                .user(finalUserPrompt)
//                .system("重要提示：你的回答必须且只能是一个没有任何其他文本或 Markdown 标记 (例如 ```) 的纯粹的 JSON 对象。")
//                .call()
//                .content();
//        System.out.println("AI审核结果: " + content);

        // Spring AI 会自动将这个 userPrompt 和 CommentAuditResult 的格式指令结合起来
        CommentAuditRecord entity = chatClient.prompt()
                .user(finalUserPrompt)
                .system("重要提示：你的回答必须且只能是一个没有任何其他文本或 Markdown 标记 (例如 ```) 的纯粹的 JSON 对象。")
                .call()
                .entity(CommentAuditRecord.class);// CommentAuditResult是我们之前定义的，包含List<SuggestionDetail>的那个类
        if (entity != null) {
            entity.setCommentId(commentId);
        }
        entity.setId(null);
        commentAuditRecordMapper.insert(entity);
        log.info("加入成功");
        BigDecimal overallScore = null;
        if (entity != null) {
            overallScore = entity.getOverallScore();
        }
        int score = 0;
        if (overallScore != null) {
            score = Integer.parseInt(overallScore.toString());
        }
        if (entity != null && (entity.getOverallSuggestion().getDescription().contains("reject") || entity.getOverallSuggestion().getDescription().contains("REJECT")) && score >= 95) {
            commentById.setStatus(0);
            String s = commentsFeignClient.updateComment(commentById);
            log.info("更新成功 {}",s);
        }
        commentById.setStatus(3);
        String s = commentsFeignClient.updateComment(commentById);
        log.info("更新成功 {}",s);
    }
}
